package com.gjp.learnjooq;

import com.gjp.learnjooq.bean.User;
import com.gjp.learnjooq.generate.tables.TbUser;
import com.gjp.learnjooq.generate.tables.records.TbUserRecord;
import org.jooq.DSLContext;
import org.jooq.SQLDialect;
import org.jooq.impl.DSL;

import java.sql.Connection;
import java.sql.DriverManager;
import java.util.List;

/**
 * Created by Gjp on 2018/7/24.
 */
public class Main {

	public static DSLContext create;
	public static void main(String[] args) {
		// 用户名
		String uname = "root";
		// 密码
		String pword = "root";
		// mysql连接url
		String url = "jdbc:mysql://localhost:3306/jooq?useUnicode=true&characterEncoding=UTF-8";

		// Connection是我们需要的唯一JDBC资源
		// PreparedStatement和ResultSet由内部的jOOQ处理
		try (Connection conn = DriverManager.getConnection(url, uname, pword)) {
			//设置数据库类型，方言
			create = DSL.using(conn, SQLDialect.MYSQL);

//			//增
//			Integer id = insert();
//			select();
//
//			//删
//			delete(id);
//			select();
//
//			//改
//			id = insert();
//			update();
//
//			//查
//			select();

			Integer page = 1;	//页码
			Integer size = 2;	//每页条数
			//分页查询
			selectPage(page,size);

			// 关闭连接对象
			create.close();
		}
		//为了本教程的目的，让我们简单地处理异常处理
		catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 新增
	 */
	public static Integer insert(){
		TbUserRecord tbUserRecord = create.newRecord(TbUser.TB_USER);
		tbUserRecord.setUsername("赵六");
		tbUserRecord.setSex("男");
		tbUserRecord.setAge(22);
		tbUserRecord.insert();
		return tbUserRecord.getId();
	}

	/**
	 * 删除
	 */
	public static void delete(Integer id){
		TbUserRecord tbUserRecord = create.newRecord(TbUser.TB_USER);
		tbUserRecord.setId(id);
		tbUserRecord.delete();
	}

	/**
	 * 修改
	 */
	public static void update(){
		create
				.update(TbUser.TB_USER)
				.set(TbUser.TB_USER.AGE,23)
				.where(TbUser.TB_USER.USERNAME.eq("赵六"))
				.execute();
	}

	/**
	 * 查询
	 */
	public static void select(){
		create
				.select()
				.from(TbUser.TB_USER)
				.fetchInto(User.class)
				.stream()
				.forEach((user)->{
					System.out.println(user);
				});
	}

	/**
	 * 分页查询
	 * @param page	页数
	 * @param size	每页条数
	 */
	public static void selectPage(Integer page,Integer size){
		List<Integer> integers = create.selectCount().from(TbUser.TB_USER).fetchInto(Integer.class);
		Integer totalCount = integers.get(0);
		System.out.println(totalCount);
		create
			.select()
			.from(TbUser.TB_USER)
				.limit(size).offset((page-1)*size)
			.fetchInto(User.class)
			.stream()
			.forEach((user)->{
				System.out.println(user);
			});
	}
}
